package com.lexed.usersys.console;

import java.io.IOException;
import java.sql.SQLException;
import java.util.*;

import com.lexed.usersys.dao.UserDAO;
import com.lexed.usersys.entity.User;
import com.lexed.usersys.utils.FileFunctions;

public class UserManagerSystem {
	Scanner sc = new Scanner(System.in);
	// 控制是否显示主菜单
	private boolean loop = true;
	// 控制菜单选择
	private String key = "";
	// 用户验证登录，增删改查功能
	private UserDAO uDAO = new UserDAO();
	// 发送文件,保存文件功能
	private FileFunctions FileFunctions = new FileFunctions();
	// 用户集合容器
	List<User> list = null;

	public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
		new UserManagerSystem().run();
		System.out.println("使用结束,退出系统");
	}

	// 显示主菜单
	private void run() throws IOException, ClassNotFoundException, SQLException {
		while (loop) {
			System.out.println("=========欢迎使用用户管理系统========");
			System.out.println("\t\t 1 登录系统");
			System.out.println("\t\t 9 退出系统");
			System.out.print("请输入你的选择：");
			key = sc.nextLine();
			// 根据用户的输入，来实现不同的功能
			switch (key) {
			case "1":
				System.out.print("请输入用户名：");
				String name = sc.nextLine();
				System.out.print("请输入密码：");
				String pwd = sc.nextLine();
				// 验证用户登录
				if (uDAO.login(name, pwd) != null) {
					System.out.println("用户 " + name + "登录成功，即将跳转功能界面");
					// 进入到二级菜单
					while (loop) {
						System.out.println("\n========用户管理系统二级菜单（用户：" + name + "）==========");
						System.out.println("\t\t 1 列表用户");
						System.out.println("\t\t 2 添加用户");
						System.out.println("\t\t 3 删除用户");
						System.out.println("\t\t 4 修改用户");
						System.out.println("\t\t 5 发送文件");
						System.out.println("\t\t 6 按年龄从小到大排序");
						System.out.println("\t\t 7 根据某个存在于用户名内的字查找用户");
						System.out.println("\t\t 8 保存用户数据到本地");
						System.out.println("\t\t 9 退出系统");
						System.out.println("请输入你的选择：");
						key = sc.nextLine();
						switch (key) {
						case "1":
							// 列表用户
							list = uDAO.findAll();
							break;
						case "2":
							// 添加用户
							Scanner sc1 = new Scanner(System.in);
							System.out.println("请输入添加的用户姓名：");
							String addName = sc1.nextLine();
							System.out.println("请输入需要添加的用户密码：");
							String addPwd = sc1.nextLine();
							System.out.println("请输入添加的用户性别：");
							String addSex = sc1.nextLine();
							System.out.println("请输入添加的用户年龄：");
							int addAge = sc1.nextInt();
							User u1 = new User(1, addName, addPwd, addSex, addAge);
							int result = uDAO.insert(u1);
							if (result == 1) {
								System.out.println("用户添加成功");
							} else {
								System.out.println("当前用户已存在,添加失败");
							}
							break;
						case "3":
							// 删除用户
							Scanner sc2 = new Scanner(System.in);
							System.out.print("请输入想要删除的用户名：");
							String delName = sc2.next();
							int flag1 = uDAO.deleteByName(delName);
							;
							if (flag1 == 1) {
								System.out.println("用户删除成功");
							} else {
								System.out.println("用户不存在，删除失败");
							}
							break;
						case "4":
							// 修改用户
							System.out.println("请输入要修改的用户id：");
							int updateId = new Scanner(System.in).nextInt();
							System.out.println("请输入要修改的用户姓名：");
							String updateName = new Scanner(System.in).nextLine();
							System.out.println("请输入要修改的用户密码：");
							String updatePwd = new Scanner(System.in).nextLine();
							System.out.println("请输入要修改的用户性别：");
							String updateSex = new Scanner(System.in).nextLine();
							System.out.println("请输入要修改的用户年龄：");
							int updateAge = new Scanner(System.in).nextInt();
							User u2 = new User(updateId, updateName, updatePwd, updateSex, updateAge);
							int flag2 = uDAO.update(u2);
							if (flag2 == 1) {
								System.out.println("修改成功");
							} else {
								System.out.println("用户不存在，修改失败");
							}
							break;
						case "5":
							// 发送文件
							Scanner sc4 = new Scanner(System.in);
							System.out.print("请输入发送文件的路径(如 d:/xxx.jpg)：");
							String src = sc4.nextLine();
							System.out.print("请输入把文件发送到对方的路径(如 d:/yyy.jpg)：");
							String dest = sc4.nextLine();
							System.out.print("把文件发送给哪个用户：");
							String getterName = sc4.nextLine();
							FileFunctions.sendFile(src, dest, name, getterName);
							break;
						case "6":
							// 根据用户年龄排序
							Collections.sort(list, new Comparator<User>() {
								@Override
								public int compare(User o1, User o2) {
									if (o1.getAge() < o2.getAge()) {
										return -1;
									} else if (o1.getAge() > o2.getAge()) {
										return 1;
									}
									return 0;
								}
							});
							System.out.println("用户id\t用户名\t密码\t  性别\t年龄");
							for (User u : list) {
								System.out.println(u);
							}
							break;
						case "7":
							System.out.println("请输入想要查找的用户名内存在的字：");
							String findName = new Scanner(System.in).next();
							try {
								List<User> user = uDAO.findByName(findName);
								System.out.println("用户id\t用户名\t密码\t  性别\t年龄");
								for (User tmp : user) {
									System.out.println(tmp);
								}
							} catch (SQLException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							break;
						case "8":
							System.out.println("请输入想要保存的路径（如d:/xxx.txt）：");
							String src2 = new Scanner(System.in).next();
							FileFunctions.saveFile(src2, list);
							break;
						case "9":
							// 退出
							loop = false;
							break;
						}
					}
				} else {
					// 登录失败
					System.out.println("用户名或密码不正确,登录失败");
				}
				break;
			case "9":
				loop = false;
				break;
			}
		}
	}

}
